package com.ruoyi.system.mybatis.handler;


import com.alibaba.ttl.TransmittableThreadLocal;
import lombok.experimental.UtilityClass;

@UtilityClass
public class TenantContextHolder {

    /**
     * 支持父子线程之间的数据传递
     */
    private final ThreadLocal<Integer> THREAD_LOCAL_TENANT = new TransmittableThreadLocal<>();


    private final ThreadLocal<String> USER_ROLE = new TransmittableThreadLocal<>();



    /**
     * TTL 设置租户ID<br/>
     * <b>谨慎使用此方法,避免嵌套调用。尽量使用 {@code TenantBroker} </b>
     *
     * @param tenantId 租户ID
     */
    public void setTenantId(Integer tenantId) {
        THREAD_LOCAL_TENANT.set(tenantId);
    }


    /**
     * 设置用户是否为管理员
     * @param role
     */
    public void setUserRole(String role) {
        USER_ROLE.set(role);
    }


    /**
     * 获取TTL中的用户是否为管理员
     *
     * @return String
     */
    public String getUserRole() {
        return USER_ROLE.get();
    }



    /**
     * 获取TTL中的租户ID
     *
     * @return String
     */
    public Integer getTenantId() {
        return THREAD_LOCAL_TENANT.get();
    }

    /**
     * 清除tenantId
     */
    public void clear() {
        THREAD_LOCAL_TENANT.remove();
    }

}
